package com.utn.disenio.entrega3;

import java.util.ArrayList;

import com.utn.disenio.entrega2.Asiento;

public class PruebaFiltros {

	public static void main(String[] args) throws Exception{
		
		/* Ejemplos de ordenamientos */
		
		Asiento asientoUno = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",1,"Asiento",(float)3.15,"E","P","D",null);
		Asiento asientoDos = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",2,"Asiento",(float)3.18,"E","P","D",null);
		Asiento asientoTres = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",3,"Asiento",(float)3.19,"E","P","D",null);
		ArrayList<Viaje> asientosDesordenados = new ArrayList<Viaje>();
		ArrayList<Viaje> asientosOrdenadosAsc;
		ArrayList<Viaje> asientosOrdenadosDes;
		Viaje viajeUno = new Viaje(asientoUno,null,null);
		Viaje viajeDos = new Viaje(asientoDos,asientoUno,null);
		Viaje viajeTres = new Viaje(asientoUno,asientoDos,asientoTres);
		
		
		asientosDesordenados.add(viajeTres);
		asientosDesordenados.add(viajeUno);
		asientosDesordenados.add(viajeDos);
		
		System.out.println("Antes de ordenar:");
		for(Viaje unAsiento: asientosDesordenados)
			System.out.println(unAsiento.getPrecio());
		 
		 Ordenar ordenPrecioUp = new Ordenar(new PrecioAscendente());
		 asientosOrdenadosAsc = ordenPrecioUp.ordenarLista(asientosDesordenados);
		 
		 System.out.println("Despues de ordenar Ascendente:");
		 for(Viaje unAsiento: asientosOrdenadosAsc)
			 System.out.println(unAsiento.getPrecio());
		 
		 Ordenar ordenPrecioDown = new Ordenar(new PrecioDescendente());
		 asientosOrdenadosDes = ordenPrecioDown.ordenarLista(asientosDesordenados);
		 
		 System.out.println("Despues de ordenar Descendente:");
		 for(Viaje unAsiento: asientosOrdenadosDes)
			 System.out.println(unAsiento.getPrecio());
		 
		 /* Ejemplos de filtros */
		 
			Asiento asiento1 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",1,"Asiento",(float)200,"E","V","D",null);
			Asiento asiento2 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",2,"Asiento",(float)500,"P","P","D",null);
			Asiento asiento3 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",3,"Asiento",(float)322,"E","V","D",null);
			Asiento asiento4 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",4,"Asiento",(float)1524,"P","P","D",null);
			Asiento asiento5 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",5,"Asiento",(float)2222,"E","P","D",null);
			Asiento asiento6 = new Asiento("BUE","LA","15/02/2012","15/02/2012","15:05","20:00",6,"Asiento",(float)24,"E","P","D",null);
			
			ArrayList<Viaje> asientosSinFiltrar = new ArrayList<Viaje>();
			ArrayList<Viaje> asientosFiltrados = new ArrayList<Viaje>();
			
			Viaje viaje1 = new Viaje(asiento1,asiento1,asiento1);
			Viaje viaje2 = new Viaje(asiento1,asiento5,asiento3);
			Viaje viaje3 = new Viaje(asiento4,asiento2,asiento6);
			Viaje viaje4 = new Viaje(asiento5,asiento2,asiento3);
			Viaje viaje5 = new Viaje(asiento6,asiento6,asiento3);
			Viaje viaje6 = new Viaje(asiento5,asiento4,asiento3);
			
			asientosSinFiltrar.add(viaje1);
			asientosSinFiltrar.add(viaje2);
			asientosSinFiltrar.add(viaje3);
			asientosSinFiltrar.add(viaje4);
			asientosSinFiltrar.add(viaje5);
			asientosSinFiltrar.add(viaje6);
			
			System.out.println("Busqueda de viajes sin filtrar:");
			 for(Viaje unViaje: asientosSinFiltrar){
				 System.out.println("-----------------------");
				 System.out.println(unViaje.getAsientoUno().getCodigoDeVuelo()+"-"+unViaje.getAsientoUno().getNumero());
				 if(unViaje.getAsientoDos() != null)
					 System.out.println(unViaje.getAsientoDos().getCodigoDeVuelo()+"-"+unViaje.getAsientoDos().getNumero());
				 if(unViaje.getAsientoTres() != null)
					 System.out.println(unViaje.getAsientoTres().getCodigoDeVuelo()+"-"+unViaje.getAsientoTres().getNumero());
			 }
			 System.out.println("");
			 
			 ArrayList<TipoDeFiltro> filtrosPrueba = new ArrayList<TipoDeFiltro>();
			 filtrosPrueba.add(new FiltroDeUbicacion("V"));
			 
			 /* Filtro por ubicacion que sea en la ventana */
			 Filtrar filtroDeUbicacion = new Filtrar(filtrosPrueba);
			 asientosFiltrados = filtroDeUbicacion.aplicarFiltros(asientosSinFiltrar);
			 
			 System.out.println("Busqueda de asientos filtrados para que esten en la ventana:");
			 for(Viaje unViaje: asientosFiltrados){
				 System.out.println("-----------------------");
				 System.out.println(unViaje.getAsientoUno().getCodigoDeVuelo()+"-"+unViaje.getAsientoUno().getNumero()+" Ubicacion:"+unViaje.getAsientoUno().getUbicacion());
				 if(unViaje.getAsientoDos() != null)
					 System.out.println(unViaje.getAsientoDos().getCodigoDeVuelo()+"-"+unViaje.getAsientoDos().getNumero()+" Ubicacion:"+unViaje.getAsientoDos().getUbicacion());
				 if(unViaje.getAsientoTres() != null)
					 System.out.println(unViaje.getAsientoTres().getCodigoDeVuelo()+"-"+unViaje.getAsientoTres().getNumero()+" Ubicacion:"+unViaje.getAsientoTres().getUbicacion());
			 }
			 System.out.println("");
			 
			 /* Filtro por precios entre 500 y 3000 */
			 filtrosPrueba.clear();
			 filtrosPrueba.add(new FiltroDePrecios((float)500,(float)3000));
			 
			 Filtrar filtroDePrecios = new Filtrar(filtrosPrueba);
			 asientosFiltrados = filtroDePrecios.aplicarFiltros(asientosSinFiltrar);
			 
			 System.out.println("Busqueda de asientos filtrados para que esten en el rango de los 500$ a 3000$:");
			 for(Viaje unViaje: asientosFiltrados){
				 System.out.println("-----------------------");
				 System.out.println("Precio del viaje:"+unViaje.getPrecio());
				 System.out.println(unViaje.getAsientoUno().getCodigoDeVuelo()+"-"+unViaje.getAsientoUno().getNumero());
				 if(unViaje.getAsientoDos() != null)
					 System.out.println(unViaje.getAsientoDos().getCodigoDeVuelo()+"-"+unViaje.getAsientoDos().getNumero());
				 if(unViaje.getAsientoTres() != null)
					 System.out.println(unViaje.getAsientoTres().getCodigoDeVuelo()+"-"+unViaje.getAsientoTres().getNumero());
			 }
		 
	}
}
